using System;
namespace IcsSEMCtrl.Com.Secs
{
	public abstract class AbstractSecsDriver
	{
		public enum CONNECTION_MODE
		{
			ACTIVE = 1,
			PASSIVE
		}
		public enum COMMUNICATION_TYPE
		{
			SECS1 = 1,
			HSMS
		}
		private string deviceName;
		private string deviceId;
		private AbstractSecsDriver.CONNECTION_MODE connectionMode;
		private bool isConnected = false;
		private bool isSEC1LogEnable = false;
		private bool isHSMSLogEnable = true;
		private bool isParameterAutoApply = true;
		public abstract event ReceivedMessage OnReceiveMessage;
		public abstract event UnknownMessage OnUnknownMessage;
		public abstract event TimeoutOccured OnTimeoutOccured;
		public abstract event ReceivedInvalidMessage OnInvalidMessage;
		public abstract event Connected OnConnected;
		public abstract event Disconnected OnDisconnected;
		public abstract event AbortMessage OnAbortMessage;
		public abstract event Secs1Log OnSecs1Log;
		public abstract event Secs2Log OnSecs2Log;
		public string DeviceName
		{
			get
			{
				return this.deviceName;
			}
			set
			{
				this.deviceName = value;
			}
		}
		public string DeviceId
		{
			get
			{
				return this.deviceId;
			}
			set
			{
				this.deviceId = value;
			}
		}
		public AbstractSecsDriver.CONNECTION_MODE ConnectionMode
		{
			get
			{
				return this.connectionMode;
			}
			set
			{
				this.connectionMode = value;
			}
		}
		public bool IsConnected
		{
			get
			{
				return this.isConnected;
			}
			set
			{
				this.isConnected = value;
			}
		}
		public bool IsSEC1LogEnable
		{
			get
			{
				return this.isSEC1LogEnable;
			}
			set
			{
				this.isSEC1LogEnable = value;
			}
		}
		public bool IsHSMSLogEnable
		{
			get
			{
				return this.isHSMSLogEnable;
			}
			set
			{
				this.isHSMSLogEnable = value;
			}
		}
		public bool IsParameterAutoApply
		{
			get
			{
				return this.isParameterAutoApply;
			}
			set
			{
				this.isParameterAutoApply = value;
			}
		}
		public AbstractSecsDriver()
		{
			
		}
        public abstract void Initialize(string driverName, SecsProperty prop);
		public abstract void Initialize(SecsProperty prop);
		public abstract void Open();
		public abstract void PassiveOpen();
		public abstract void Reopen();
		public abstract void Close();
		public abstract void TerminateSEComDriver();
		public abstract void ReplyMessage(string sxfx, object secsTransaction, SecsValue secsValue);
		public abstract void SendMessage(string sxfx, string param, object obj1);
		public abstract void SendMessage(string sxfx, string param, object obj1, object obj2);
		public abstract void SendMessage(string sxfx, string param, object obj1, object obj2, object obj3);
		public abstract void SendMessage(string sxfx, string param, object obj1, object obj2, object obj3, object obj4);
		public abstract void SendMessage(string sxfx, string param, object obj1, object obj2, object obj3, object obj4, object obj5);
		public abstract void SendMessage(string sxfx, string param, object[] objs);
		public abstract void SendMessage(string sxfx, object obj1);
		public abstract void SendMessage(string sxfx, object obj1, object obj2);
		public abstract void SendMessage(string sxfx, object obj1, object obj2, object obj3);
		public abstract void SendMessage(string sxfx, object obj1, object obj2, object obj3, object obj4);
		public abstract void SendMessage(string sxfx, object obj1, object obj2, object obj3, object obj4, object obj5);
		public abstract void SendMessage(string sxfx, object[] objs);
	}
}
